module ethernet_arp_top#(
    parameter                   SOURCE_MAC = 48'h11_22_33_44_55_66      ,
    parameter                   SOURCE_IP  = {8'd192,8'd168,8'd7,8'd11} 
)(
    input                       i_clk                                   ,
    input                       i_rst                                   ,
    input   [47: 0]             i_set_source_ip                         ,
    input                       i_set_source_ip_valid                   ,
    input   [47: 0]             i_set_source_mac                        ,
    input                       i_set_source_mac_valid                  ,
    input                       i_arp_req                               ,
    input   [31: 0]             i_arp_req_ip                            ,
    output  [47: 0]             o_arp_info_mac0                         ,
    output  [31: 0]             o_arp_info_ip0                          ,
    output  [47: 0]             o_arp_info_mac1                         ,
    output  [31: 0]             o_arp_info_ip1                          ,
    input                       s_axis_tvalid                           ,
    input   [7 : 0]             s_axis_tdata                            ,
    input                       s_axis_tlast                            ,
    input   [32: 0]             s_axis_tuser                            ,
    output                      m_axis_tvalid                           ,
    output  [7 : 0]             m_axis_tdata                            ,
    input                       m_axis_tready                           ,
    output                      m_axis_tlast                            ,
    output  [64: 0]             m_axis_tuser                            
);


    logic                       arp_rx_valid                            ;
    logic   [47: 0]             arp_rx_mac                              ;
    logic   [31: 0]             arp_rx_ip                               ;  
    logic   [15: 0]             arp_rx_type                             ;

    arp_tx #(
        .SOURCE_IP                      ( SOURCE_IP                 ),
        .SOURCE_MAC                     ( SOURCE_MAC                )  
    )arp_tx_inst(
        .i_clk                          ( i_clk                     ),
        .i_rst                          ( i_rst                     ),
        .i_set_source_ip                ( i_set_source_ip           ),
        .i_set_source_ip_valid          ( i_set_source_ip_valid     ),
        .i_set_source_mac               ( i_set_source_mac          ),
        .i_set_source_mac_valid         ( i_set_source_mac_valid    ),
        .i_arp_req                      ( i_arp_req                 ),
        .i_arp_req_ip                   ( i_arp_req_ip              ),
        .o_arp_info_mac0                ( o_arp_info_mac0           ),
        .o_arp_info_ip0                 ( o_arp_info_ip0            ),
        .o_arp_info_mac1                ( o_arp_info_mac1           ),
        .o_arp_info_ip1                 ( o_arp_info_ip1            ), 
        .i_arp_rx_valid                 ( arp_rx_valid              ),
        .i_arp_rx_ip                    ( arp_rx_ip                 ),
        .i_arp_rx_mac                   ( arp_rx_mac                ),
        .i_arp_rx_type                  ( arp_rx_type               ),
        .m_axis_tvalid                  ( m_axis_tvalid             ),   
        .m_axis_tdata                   ( m_axis_tdata              ),   
        .m_axis_tready                  ( m_axis_tready             ),   
        .m_axis_tlast                   ( m_axis_tlast              ),   
        .m_axis_tuser                   ( m_axis_tuser              )  
    );

    arp_rx #(
        .SOURCE_IP                      ( SOURCE_IP                 )  
    )arp_rx_inst(
        .i_clk                          ( i_clk                     ),
        .i_rst                          ( i_rst                     ),
        .i_set_source_ip                ( i_set_source_ip           ),
        .i_set_source_ip_valid          ( i_set_source_ip_valid     ),
        .o_arp_rx_valid                 ( arp_rx_valid              ),
        .o_arp_rx_ip                    ( arp_rx_ip                 ),
        .o_arp_rx_mac                   ( arp_rx_mac                ),
        .o_arp_rx_type                  ( arp_rx_type               ),
        .s_axis_tvalid                  ( s_axis_tvalid             ),
        .s_axis_tdata                   ( s_axis_tdata              ),
        .s_axis_tlast                   ( s_axis_tlast              ),
        .s_axis_tuser                   ( s_axis_tuser              )
    );




endmodule